package com.ling.pl.security.service;

import com.ling.pl.core.dao.IDao;
import com.ling.pl.security.model.DefaultOrg;
import com.ling.pl.security.model.DefaultPosition;
import com.ling.pl.security.model.DefaultUser;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * @author bo.wang
 */
@Component(DefaultOrgService.BEAN_ID)
public class DefaultOrgService extends BaseDefaultOrgService {
    public DefaultOrg newOrgInstance(String orgId) {
        return new DefaultOrg(orgId);
    }

    public List<DefaultOrg> loadUserOrgs(String username) {
        return defaultOrgDao.loadUserOrgs(username);
    }

    public DefaultOrg loadOrgById(String orgId) {
        return defaultOrgDao.loadOrgById(orgId);
    }

    private void buildParentOrg(DefaultOrg org) {
        DefaultOrg defaultOrg = (DefaultOrg) org;
        if (StringUtils.isNotEmpty(defaultOrg.getParentId())) {
            DefaultOrg parentOrg = this.loadOrgById(defaultOrg.getParentId());
            defaultOrg.setParent(parentOrg);
            this.buildParentOrg(parentOrg);
        }
    }

    public List<DefaultOrg> loadOrgsByParentId(String parentId, String companyId, Map params) {
        return defaultOrgDao.loadOrgsByParentId(parentId, companyId, params);
    }

    public String uniqueCheck(String id) {
        return defaultOrgDao.uniqueCheck(id);
    }

    public int countChildren(String parentId) {
        return defaultOrgDao.countChildren(parentId);
    }


    public IDao getDao() {
        return defaultOrgDao;
    }


    public List<DefaultPosition> loadPositionsByOrgId(String orgId) {
        return defaultOrgDao.loadPositionsByOrgId(orgId);
    }


    public List<DefaultUser> loadUsersByOrgId(String orgId) {
        return defaultOrgDao.loadUsersByOrgId(orgId);
    }
}

